<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <title>鼠标绘制线条</title>
  <link rel="icon" href="https://img.kaikeba.com/kkb_portal_icon.ico">
  <style>
    body {
      margin: 0;
      overflow: hidden;
    }

    #canvas {
      background-color: antiquewhite;
    }
  </style>
</head>

<body>
  <canvas id="canvas"></canvas>
  <!-- 顶点着色器 -->
  <script id="vertexShader" type="x-shader/x-vertex">
    attribute vec4 a_Position;
    void main(){
        gl_Position=a_Position;
        gl_PointSize=20.0;
    }
  </script>
  <!-- 片元着色器 -->
  <script id="fragmentShader" type="x-shader/x-fragment">
    precision mediump float;    
    uniform bool u_IsPOINTS;
    void main(){ 
      if(u_IsPOINTS){
        float dist=distance(gl_PointCoord,vec2(0.5,0.5));
        if(dist<0.5){
          gl_FragColor=vec4(1,1,0,1);
        }else{
          discard;
        }
      }else{
        gl_FragColor=vec4(1,1,0,1);
      }
    }
  </script>
  <script type="module">
    import { initShaders, getMousePosInWebgl } from "../jsm/Utils.js";
    import Poly from '../jsm/Poly.js';

    const canvas = document.querySelector("#canvas");
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;

    // 获取着色器文本
    const vsSource = document.querySelector("#vertexShader").innerText;
    const fsSource = document.querySelector("#fragmentShader").innerText;

    //三维画笔
    const gl = canvas.getContext("webgl");

    //初始化着色器
    initShaders(gl, vsSource, fsSource);


    //声明颜色 rgba
    gl.clearColor(0, 0, 0, 1);
    //刷底色
    gl.clear(gl.COLOR_BUFFER_BIT);

    const poly = new Poly({
      gl,
      circleDot: true,
      types: ['POINTS', 'LINE_STRIP']
    })

    canvas.addEventListener('mousedown', (event) => {
      const { x, y } = getMousePosInWebgl(event, canvas)
      poly.addVertice(x, y)
      gl.clear(gl.COLOR_BUFFER_BIT);
      poly.draw()
    })


  </script>
</body>

</html>